如在文章里,我们通常会看到以下关于统计方法的描述。
对于数值变量,首先进行正态性检验,如果各组均满足正态性且两组间方差相等,采用均数(标准差)进行统计描述,采用t检验进行组间比较;否则采用中位数(四分位数间距)进行统计描述,采用非参数Wilcoxon秩和检验进行组间比较。对于分类变量,采用例数(百分比)的形式描述,组间比较采用χ2检验。
今天我们一起来看看如何“多快好省”的完成正态性检验。
导入数据
首先,在excel里全选数据集,右键复制。
然后,在Rstudio中,输入:
mydata<-read.delim("clipboard")
单变量正态性检验
查看age是否正态,输入:
shapiro.test(mydata$age)
输出:
结果解读:
因为本案例数据样本量<=5000,故选择Shapiro-Wilk检验(W检验),统计量w=0.98954,p=0.1503,可以认为age是符合正态性的。
多组多个变量正态性检验
下面我们来看看如何一口气做好每组的正态性检验,比如我们要检验不同bmi组的age、a、b、c、x、y是否符合正态性,输入:
install.packages("dplyr")library(dplyr)mydata[,c("age","a","b","c","x","y")]%>% group_by(mydata$bmig) %>% summarise_all(.funs = funs(p.value = shapiro.test(.)$p.value))
输出:
结果解读:
给出了不同bmi组的各变量正态性检验的p值,如果p>0.05,则认为符合正态性。以变量age为例,体重正常组age正态性检验p=0.795,符合正态性。需要注意的是,对于特别小的p值,用了科学计数法表示,如体重正常组变量a的正态性检验p值为7.29e-8,表示7.29*10-8,显然是小于0.05的。
代码使用技巧:
其他问题
如果样本量>5000呢,则采用修正的Kolmogorov-Smirnov检验(K-S检验),可用
nortest包中的lillie.test()函数来实现。
以ggplot2的diamonds数据集为例,输入:
library(ggplot2)head(diamonds)
输入:
install.packages("nortest")library(nortest)lillie.test(diamonds$price)
输出: